package Data;

import Model.ProdutoraBean;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;

public class ProdutoraDAO extends Conexao {

    public Vector listarProdutora(String nome) throws SQLException {

        //Declaro a consulta
        String sql = "select * from produtora where inativo = 'F'";

        //Crio um array de produtoras
        Vector Dados = new Vector();

        //se tiver algum nome pra pesquisar modifico a consulta
        if (nome != null && !nome.isEmpty()) {
            sql += " and proddesc like '%" + nome + "%'";
        }

        //Pego uma conexao com o banco
        Connection conn = getConexao();

        //Preparo a consulta
        PreparedStatement ps = conn.prepareStatement(sql);

        //Executo a consulta
        ResultSet rs = ps.executeQuery();

        //Percorre todas as linhas de resultado da query
        while (rs.next()) {
            Vector linhas = new Vector();

            //Preenche o produtora com as informações
            linhas.add(rs.getInt(1));
            linhas.add(rs.getString(2));

            //Adiciona o produtora no array
            Dados.add(linhas);
        }

        //Fecho o PreparedStatment
        ps.close();

        //Retorno os produtoras encontrados
        return Dados;

    }
    
      public List listarProdutoraAsList(String nome) throws SQLException {

        //Declaro a consulta
        String sql = "select * from produtora where inativo = 'F'";

        //Crio um array de produtoras
        List<ProdutoraBean> produtoras = new ArrayList<>();

        //se tiver algum nome pra pesquisar modifico a consulta
        if (nome != null && !nome.isEmpty()) {
            sql += " and proddesc like '%" + nome + "%'";
        }

        //Pego uma conexao com o banco
        Connection conn = getConexao();

        //Preparo a consulta
        PreparedStatement ps = conn.prepareStatement(sql);

        //Executo a consulta
        ResultSet rs = ps.executeQuery();

        //Percorre todas as linhas de resultado da query
        while (rs.next()) {
            ProdutoraBean produtora = new ProdutoraBean();

            //Preenche o produtora com as informações
            produtora.setCodigo(rs.getInt(1));
            produtora.setDescricao(rs.getString(2));

            //Adiciona o produtora no array
            produtoras.add(produtora);
        }

        //Fecho o PreparedStatment
        ps.close();

        //Retorno os produtoras encontrados
        return produtoras;

    }

    public boolean alterarProdutora(ProdutoraBean produtora) throws SQLException {
        //Validação do objeto
        if (produtora == null) {
            return false;
        }

        //Declaro a query
        String sql = "UPDATE PRODUTORA SET PRODDESC = ? WHERE PRODCOD = ?";

        //Pego uma conexao com o banco
        Connection conn = getConexao();

        //Preparo a consulta
        PreparedStatement ps = conn.prepareStatement(sql);

        //Colocando os parametros na consulta
        ps.setObject(1, produtora.getDescricao());
        ps.setObject(2, produtora.getCodigo());

        //Executo a consulta
        int resultado = ps.executeUpdate();

        //Fecho o prepared statment
        ps.close();

        //verifico se deu tudo certo
        if (resultado >= 1) {
            return true;
        } else {
            return false;
        }

    }

    public ProdutoraBean getProdutora(int id) throws SQLException {

        //Validação do id
        if (id < 1) {
            return null;
        }

        //Declaro a consulta
        String sql = "select * from produtora where inativo = 'F' and prodcod = ?";

        //Crio o objeto de retorno
        ProdutoraBean produtora = null;

        //Pego uma conexao com o banco
        Connection conn = getConexao();

        //Preparo a consulta
        PreparedStatement ps = conn.prepareStatement(sql);

        //Coloco os parametros na consulta
        ps.setObject(1, id);

        //Executo a consulta
        ResultSet rs = ps.executeQuery();

        //Se tiver algum resultado
        if (rs.next()) {

            //Instancio o objeto
            produtora = new ProdutoraBean();

            //Preenche o produtora com as informações
            produtora.setCodigo(rs.getInt(1));
            produtora.setDescricao(rs.getString(2));

        }

        //Fecho o PreparedStatment
        ps.close();

        //Retorno os produtoras encontrados
        return produtora;

    }

    public boolean cadastrarProdutora(ProdutoraBean produtora) throws SQLException {
        //Validação do objeto
        if (produtora == null) {
            return false;
        }

        //Declaro a query
        String sql = "insert into produtora values (?,?)";

        //Pego uma conexao com o banco
        Connection conn = getConexao();

        //Preparo a consulta
        PreparedStatement ps = conn.prepareStatement(sql);

        //Colocando os parametros na consulta
        ps.setObject(1, produtora.getDescricao());
        ps.setObject(2, "F");

        //Executo a consulta
        int resultado = ps.executeUpdate();

        //Fecho o prepared statment
        ps.close();

        //verifico se deu tudo certo
        if (resultado >= 1) {
            return true;
        } else {
            return false;
        }

    }

    public boolean deletarProdutora(int id) throws SQLException {

        //Validação do id
        if (id < 0) {
            return false;
        }

        //Declaro a query
        String sql = "update produtora set inativo = 'T' where prodcod = ?";

        //Pego uma conexao com o banco
        Connection conn = getConexao();

        //Preparo a consulta
        PreparedStatement ps = conn.prepareStatement(sql);

        //Coloco os parametros na consulta
        ps.setInt(1, id);

        //Executo a consulta
        int resultado = ps.executeUpdate();

        //Fecho o preparedStatment
        ps.close();

        //Verifico se atualizou algum registro
        if (resultado >= 1) {
            return true;
        } else {
            return false;
        }
    }

    public boolean deletarProdutora(ProdutoraBean produtora) throws SQLException {

        //Validação do objeto
        if (produtora != null && produtora.getCodigo() > 0) {
            return deletarProdutora(produtora.getCodigo());
        } else {
            return false;
        }
    }
}
